package com.yuanzi.base.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;

/**
 * 时间工具类
 * @author chengshx
 * @date 2017年5月8日
 */
public class TimeUtils {

	/**
	 * 获取当前时间戳，精确到秒
	 * @author chengshx
	 * @return
	 */
	public static Long currentTimeSeconds() {
		return System.currentTimeMillis() / 1000;
	}
	
	/**
	 * 获取当前日期的时间戳，精确到秒
	 * @author chengshx
	 * @date 2017年10月30日
	 *
	 * @return
	 */
	public static Long currentDateSeconds() {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		Long dateMillis = 0L;
		try {
			dateMillis = dateFormat.parse(dateFormat.format(new Date())).getTime() / 1000;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return dateMillis;
	}
	
	/**
	 * 获取月份开始第一天的时间戳(精确到秒)
	 * @author weiyx
	 * @date 2018年8月22日
	 * @param year
	 * @param month
	 * @return
	 */
	public static Long getMonthBeginSeconds(Integer year, Integer month) {
		Long times = null;
		try {
			SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd");
			Date date;
			date = sm.parse(year + "-" + month + "-01");
			times = date.getTime()/1000;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return times;
	}
	
	/**
	 * 获取一个月最后一天结束的时间戳（精确到秒）
	 * @author weiyx
	 * @date 2018年8月22日
	 * @param year
	 * @param month
	 * @return
	 */
	public static Long getMonthEndSeconds(Integer year, Integer month) {
		Long times = null;
		try {
			SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM");
			Date date = sm.parse(year + "-" + month);
			Calendar cal = Calendar.getInstance();  
			cal.setTime(date);
			//设置为当月最后一天
			cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));  
			//将小时至23
			cal.set(Calendar.HOUR_OF_DAY, 23);  
			//将分钟至59
			cal.set(Calendar.MINUTE, 59);  
			//将秒至59
			cal.set(Calendar.SECOND,59);  
			//将毫秒至999
			cal.set(Calendar.MILLISECOND, 999);  
			// 获取本月最后一天的时间戳  
			times = cal.getTimeInMillis()/1000;
		}catch(Exception e) {
			e.printStackTrace();
		}
		return times;
	}
	
	/**
	 * 获取当天开始的时间戳，精确到秒（0时0分0秒）
	 * @author weiyx
	 * @date 2018年8月22日
	 * @return
	 */
	public static Long currentDateEndSeconds() {
		//获取当前时间
		Date date = new Date();
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		//将小时设置成0
		cal.set(Calendar.HOUR_OF_DAY, 23);
		//将分钟设置成0
		cal.set(Calendar.MINUTE, 59);
		//将秒设置成0
		cal.set(Calendar.SECOND, 59);
		//将毫秒至999
		cal.set(Calendar.MILLISECOND, 999); 
		return cal.getTimeInMillis()/1000;
	}
	
	/**
	 * @Description:获取给定日期的时间戳,精确到秒
	 * @author xueyya
	 * @date:2018年8月24日 下午4:41:11
	 * @param date
	 * @return Long
	 */
	public static Long getTargetDateSeconds(String targetDate) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		Long dateMillis = 0L;
		try {
			dateMillis = dateFormat.parse(targetDate).getTime() / 1000;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return dateMillis;
	}
	
	/**
	 * @Description:获取给定月的天数
	 * @author xueyya
	 * @date:2018年9月4日 下午4:35:58
	 * @param year
	 * @param month
	 * @return Integer
	 */
	public static Integer getDaysForMonth(Integer year, Integer month) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month - 1);
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
	
	/**
	 * 如果timeA > timeB 则返回true,否则返回false
	 * @param timeA
	 * @param timeB
	 * @return
	 * @author wangzhqf
	 * 2017年6月29日
	 */
	public static boolean compareTime(Long timeA, Long timeB){
		if(!Objects.isNull(timeA) && !Objects.isNull(timeB)){
			int remainder = Long.compare(timeA.longValue(), timeB.longValue());
			if(remainder > 0){
				return true;
			}
		}
		return false;
	}
	
}
